package com.vm.myview;

import java.io.File;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

import com.android.volley.RequestQueue;
import com.android.volley.VolleyError;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.vm.activity.LoginActivity;
import com.vm.broadcast.AppInstallReceiver;
import com.vm.commons.CurrentUser;
import com.vm.commons.ProgressUtil;
import com.vm.commons.StringUtil;
import com.vm.commons.VMConst;
import com.vm.db.DownInfoDao;
import com.vm.model.ActiveSoft;
import com.vm.model.DownInfo;
import com.vm.model.Soft;
import com.vm.utils.ApkUtils;
import com.vm.utils.DownloadThread;
import com.vm.utils.MyVolley;
import com.wwt.app.R;

import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.Toast;

/**
 * 
 * @ProjectName: [WeiMai]
 * @Author: [kent.wang]
 * @CreateDate: [2015年3月26日 下午2:14:20]
 * @Version: [v1.0]
 * 
 */
public class FoundDown {

	private DownloadThread downThread;
	private Handler downHandler;
	private Context mContext;
	LinearLayout layout;
	Button btn_download;
	ProgressBar progressBar;
	RelativeLayout rlayout_info;
	// RelativeLayout rlayout_progressBar;
	View view;

	DownInfoDao dao;
	DownInfo apkInfo;
	private int fileSize = 0;
	private int nowProgressValue = 0;
	ActiveSoft activeSoft;

	public FoundDown(Context context, View view, ActiveSoft activeSoft) {

		this.mContext = context;
		this.view = view;
		dao = new DownInfoDao(context);
		this.activeSoft = activeSoft;
		initProgressBar();
	}

	public void initProgressBar() {

		init();
		boolean isInstalled = ApkUtils.isAppInstalled(
				activeSoft.getPackageName(), mContext);
		// 判断APK是否有安装
		if (isInstalled) {
			btn_download.setText("已安装");
			btn_download.setEnabled(false);
		} else {

			File apkfile = new File(
					StringUtil.getSdApkUrl(activeSoft.getName()));
			if (apkfile.exists()) {

				// 判断APK在机器的状态,正在下载,已下载,已安装
				apkInfo = dao.query(activeSoft.getSoftId());
				if (apkInfo != null) {
					if (apkInfo.getCompleted() == null
							|| apkInfo.getCompleted() == 0) {

						if (apkInfo.getIsPause() == 0) {
							btn_download.setText("暂停");
						} else {
							btn_download.setText("继续");
						}
					} else {
						btn_download.setText("安装");
					}
				}
			}
		}
	}

	/**
	 * 初始化控件
	 */
	private void init() {

		btn_download = (Button) view.findViewById(R.id.btn_download);
		btn_download.setOnClickListener(downClickListener);

		progressBar = (ProgressBar) view.findViewById(R.id.progressBar);
		rlayout_info = (RelativeLayout) view.findViewById(R.id.rlayout_info);
		// rlayout_progressBar = (RelativeLayout) view
		// .findViewById(R.id.rlayout_progressBar);

	}

	private Handler mainHandler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case 100:
				rlayout_info.setVisibility(View.VISIBLE);
				progressBar.setVisibility(View.GONE);
				btn_download.setText("已安装");
				// 发送增加记录到数据库执行增加下载记录

				// // String code = TelephonyManager.d
				// String softName = activeSoft.getName();
				// try {
				// softName = URLEncoder.encode(softName, "UTF-8");
				// } catch (UnsupportedEncodingException e) {
				// // TODO Auto-generated catch block
				// e.printStackTrace();
				// }
				// String url = VMConst.REQUEST_URL + "addDownRecord?softId="
				// + activeSoft.getSoftId() + "&softName=" + softName
				// + "&userId=" + CurrentUser.USERID + "&deviceId="
				// + StringUtil.DEVICEID;
				//
				// StringRequest stringRequest = new StringRequest(url,
				// new Listener<String>() {
				//
				// @Override
				// public void onResponse(String arg0) {
				// // TODO Auto-generated method stub
				//
				// }
				// }, null);
				// RequestQueue mQueue = MyVolley.getRequestQueue();
				// mQueue.add(stringRequest);

				addRecord();
				break;
			case 200:
				break;

			case 500:
				if (nowProgressValue <= fileSize) {

					fileSize = msg.arg1;
					progressBar.setMax(fileSize);
					new Thread() {
						@Override
						public void run() {
							while (true) {
								progressBar.setProgress(nowProgressValue);
							}
						}
					}.start();
					// }
				} else {
					Toast toast = Toast.makeText(mContext, "当前附件已下载", 500);
					toast.setGravity(Gravity.CENTER, 0, 0);
					toast.show();
				}

				break;
			case 600:
				nowProgressValue = msg.arg1;
				ProgressUtil.hashMap.put(activeSoft.getSoftId(),
						nowProgressValue);
				break;
			case 700:
				Toast toast = Toast.makeText(mContext, "网络异常或当前附件不存在", 500);
				toast.setGravity(Gravity.CENTER, 0, 0);
				toast.show();
				break;
			case 800:
				Toast toast1 = Toast.makeText(mContext, "URL异常，请联系管理员", 500);
				toast1.setGravity(Gravity.CENTER, 0, 0);
				toast1.show();
				break;
			case 900:
				Toast toast2 = Toast.makeText(mContext, "暂停下载", 500);
				toast2.setGravity(Gravity.CENTER, 0, 0);
				toast2.show();
				break;
			case 1000:
				Toast toast3 = Toast.makeText(mContext, "下载完成", 500);
				toast3.setGravity(Gravity.CENTER, 0, 0);
				toast3.show();
				btn_download.setText("安装");

				dao.complete(activeSoft.getSoftId());
				File apkfile = new File(StringUtil.getSdApkUrl(activeSoft
						.getName()));
				if (!apkfile.exists()) {
					return;
				}

				AppInstallReceiver.mainHandler = mainHandler;
				Intent i = new Intent(Intent.ACTION_VIEW);

				i.setDataAndType(Uri.parse("file://" + apkfile.toString()),
						"application/vnd.android.package-archive");
				view.getContext().startActivity(i);

				break;
			default:
				break;
			}
			super.handleMessage(msg);
		}
	};

	/**
	 * 下载按钮监听
	 */
	public OnClickListener downClickListener = new OnClickListener() {

		@Override
		public void onClick(View v) {

			if (btn_download.getText().toString().equals("安装")) {
				// 执行安装
				Toast toast3 = Toast.makeText(mContext, "正在安装", 500);
				toast3.setGravity(Gravity.CENTER, 0, 0);
				toast3.show();

				File apkfile = new File(StringUtil.getSdApkUrl(activeSoft
						.getName()));
				if (!apkfile.exists()) {
					return;
				}
				Intent i = new Intent(Intent.ACTION_VIEW);
				i.setDataAndType(Uri.parse("file://" + apkfile.toString()),
						"application/vnd.android.package-archive");
				view.getContext().startActivity(i);
				AppInstallReceiver.mainHandler = mainHandler;

			} else if (btn_download.getText().toString().equals("下载")) {
				btn_download.setText("暂停");

				// 下载APK
				rlayout_info.setVisibility(View.GONE);
				progressBar.setVisibility(View.VISIBLE);

				// currentId = v.getTag().toString();
				// Log.i(TAG, currentId);
				// System.out
				// .println("<<<<" + nowProgressValue + "<<<" + fileSize);
				// progressText.setText("稍等");
				// progressText.setTextColor(Color.BLACK);
				Message msg = new Message();
				// msg.arg1 = currentId;
				msg.what = 100;
				// 下载地址
				// msg.obj = VMConst.DOWN_URL + currentId + "&userId="
				// + CurrentUser.USERID;
				Soft soft = new Soft();
				soft.setId(activeSoft.getSoftId());
				soft.setImageUrl(activeSoft.getImageUrl());
				soft.setApkUrl(activeSoft.getApkUrl());
				soft.setName(activeSoft.getName());
				msg.obj = soft;

				dao.start(activeSoft.getSoftId());

				downThread = new DownloadThread(mContext, mainHandler);
				downThread.start();

				ProgressUtil.hashMap.put(activeSoft.getSoftId(),
						nowProgressValue);

				do {
					downHandler = downThread.getDownHandler();
				} while (null == downHandler);

				downHandler.sendMessage(msg);
			} else if (btn_download.getText().toString().equals("暂停")) {

				downThread.isPause = true;
				btn_download.setText("继续");

			} else if (btn_download.getText().toString().equals("继续")) {
				// downThread.setSuspend(false);

				// 下载APK
				rlayout_info.setVisibility(View.GONE);
				progressBar.setVisibility(View.VISIBLE);

				// currentId = v.getTag().toString();
				// Log.i(TAG, currentId);
				// System.out
				// .println("<<<<" + nowProgressValue + "<<<" + fileSize);
				// progressText.setText("稍等");
				// progressText.setTextColor(Color.BLACK);
				Message msg = new Message();
				// msg.arg1 = currentId;
				msg.what = 100;
				// 下载地址
				// msg.obj = VMConst.DOWN_URL + currentId + "&userId="
				// + CurrentUser.USERID;
				Soft soft = new Soft();
				soft.setId(activeSoft.getSoftId());
				soft.setImageUrl(activeSoft.getImageUrl());
				soft.setApkUrl(activeSoft.getApkUrl());
				soft.setName(activeSoft.getName());
				msg.obj = soft;

				dao.start(activeSoft.getSoftId());

				downThread = new DownloadThread(mContext, mainHandler);
				downThread.start();

				ProgressUtil.hashMap.put(activeSoft.getSoftId(),
						nowProgressValue);

				do {
					downHandler = downThread.getDownHandler();
				} while (null == downHandler);

				downHandler.sendMessage(msg);
				btn_download.setText("暂停");
			}

		}
	};

	/**
	 * 上传下载记录
	 */
	public void addRecord() {
		if (CurrentUser.USERID != null) {
			RequestQueue mQueue = Volley.newRequestQueue(mContext);

			String url = VMConst.REQUEST_URL + "addDownloadRecord?userId="
					+ CurrentUser.USERID + "&softId=" + activeSoft.getSoftId()
					+ "&deviceId=" + StringUtil.DEVICEID;

			StringRequest ifGetRequest = new StringRequest(url,
					new Listener<String>() {

						@Override
						public void onResponse(String response) {
							if (response.equals("添加成功")) {
								System.out.println("success");
							}
						}
					}, new ErrorListener() {

						@Override
						public void onErrorResponse(VolleyError error) {
						}
					});
			mQueue.add(ifGetRequest);
		}

	}

}
